package modelo.bd.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelo.bd.ConexionPool;
import modelo.bd.excepcion.DAOException;
import modelo.dominio.Busqueda;

public class BusquedaDAO { //extends AbstractDAO<Busqueda> {

    private String query;

    protected List<Busqueda> select() throws DAOException {
        Connection conexion = null;
        PreparedStatement sentencia = null;
        ResultSet resultado = null;
        List<Busqueda> resultados = null;
        try {
            conexion = ConexionPool.getInstancia().getConexion();
            sentencia = conexion.prepareStatement(query);
            resultado = sentencia.executeQuery();
            resultados = new ArrayList<Busqueda>();
            while (resultado.next()) {
                Busqueda busqueda = new Busqueda();
                busqueda.setTipo(resultado.getString("TIPO"));
                busqueda.setVinculo(resultado.getString("VINCULO"));
                busqueda.setDescripcion(resultado.getString("DESCRIPCION"));
                busqueda.setCoincidente(resultado.getBoolean("COINCIDENCIA"));
                resultados.add(busqueda);
            }
        } catch (SQLException ex) {
            throw new DAOException("1 BUDS-SQL " + ex.getMessage());
        } finally {
            try {
                if (resultado != null) {
                    resultado.close();
                }
                if (sentencia != null) {
                    sentencia.close();
                }
                if (conexion != null) {
                    conexion.close();
                }
            } catch (SQLException ex) {
                throw new DAOException("2 BUDS-SQL " + ex.getMessage());
            }
        }
        return resultados;
    }

    public List<Busqueda> ejecutaProcedimiento(String criterio, Integer area) throws DAOException {
        Connection conexion = null;
        CallableStatement sentencia = null;
        ResultSet resultado = null;
        List<Busqueda> resultados = null;
        try {
            query = "{call SSMA_BUSQUEDA_P('" + criterio.trim() + "'," + area + ")}";
            conexion = ConexionPool.getInstancia().getConexion();
            sentencia = conexion.prepareCall(query);
            sentencia.execute();
            resultado = sentencia.getResultSet();
            resultados = new ArrayList<Busqueda>();
            while (resultado.next()) {
                Busqueda busqueda = new Busqueda();
                busqueda.setTipo(resultado.getString("TIPO"));
                busqueda.setVinculo(resultado.getString("VINCULO"));
                busqueda.setDescripcion(resultado.getString("DESCRIPCION"));
                busqueda.setCoincidente(resultado.getBoolean("COINCIDENCIA"));
                resultados.add(busqueda);
            }
        } catch (SQLException ex) {
            throw new DAOException("3 BUDS-SQL " + ex.getMessage());
        } finally {
            try {
                if (resultado != null) {
                    resultado.close();
                }
                if (sentencia != null) {
                    sentencia.close();
                }
                if (conexion != null) {
                    conexion.close();
                }
            } catch (SQLException ex) {
                throw new DAOException("4 BUDS-SQL " + ex.getMessage());
            }
        }
        return resultados;
    }
}
